home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / Pascal / Snippets / GetNamedDCtlEntry / GetNamedDCtlEntry.p next >
Encoding:
Text File  |  1994-11-09  |  1.3 KB  |  60 lines  |  [TEXT/R*ch]

  1. function GetNamedDCtlEntry (driverName: str31): DCtlHandle;
  2.   type
  3.    Ptr2Word = ^integer;
  4.   const
  5.    UnitNtryCnt = $1D2;             {[GLOBAL VAR]  count of entries in unit
  6. table [word]}
  7.    dRamBased = $40;
  8.   type
  9.    DriverHand = ^DriverPtr;
  10.    DriverPtr = ^DriverStruct;
  11.    DriverStruct = record
  12.      drvrFlags: integer;
  13.      drvrDelay: integer;
  14.      drvrEMask: integer;
  15.      drvrMenu: integer;
  16.      drvrOpen: integer;
  17.      drvrPrime: integer;
  18.      drvrCtl: integer;
  19.      drvrStatus: integer;
  20.      drvrClose: integer;
  21.      drvrName: str31;
  22.     end;
  23.  
  24.   var
  25.    id: integer;
  26.    DCtl: DCtlHandle;
  27.    curDrvrPtr: DriverPtr;
  28.  
  29.  begin
  30.   for id := -1 downto -(Ptr2Word(UnitNtryCnt)^ + 1) do
  31.    begin
  32.     DCtl := GetDCtlEntry(id);
  33.     if DCtl <> nil then
  34.      begin
  35.       curDrvrPtr := DriverPtr(DCtl^^.dCtlDriver);
  36.       if curDrvrPtr <> nil then
  37.        begin
  38.        if BitAnd(DCtl^^.dCtlFlags, dRAMBased) <> 0 then
  39.        curDrvrPtr := DriverHand(curDrvrPtr)^;
  40.        if (EqualString(curDrvrPtr^.drvrName, driverName, false, true)) then
  41.        begin
  42.        GetNamedDCtlEntry := DCtl;
  43.        exit(GetNamedDCtlEntry);
  44.        end;
  45.        end;
  46.      end;
  47.    end;
  48.   GetNamedDCtlEntry := nil;
  49.  end;
  50.  
  51.  function DrvrOpen (DCtl: DCtlHandle): boolean;
  52.   const
  53.    dOpened = $20;
  54.  begin
  55.   if DCtl = nil then
  56.    DrvrOpen := false
  57.   else
  58.    DrvrOpen := BitAnd(DCtl^^.dCtlFlags, dOpened) <> 0;
  59.  end;
  60.